package com.wsc.cglib;

import com.wsc.dynamicproxy.LogHandler;
import com.wsc.dynamicproxy.Movable;
import net.sf.cglib.proxy.Enhancer;

import java.lang.reflect.Proxy;
import java.util.Random;

public class Tank {
    public void move() {
        System.out.println("坦克正在跑.......");

        // 模拟坦克运行了一段时间
        try {
            Thread.sleep(new Random().nextInt(1000));
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        Enhancer enhancer = new Enhancer();
        // 设置需要代理的类
        enhancer.setSuperclass(Tank.class);
        // 设置代理需要做的事情，相当于JDK动态代理中的 InvocationHandler
        enhancer.setCallback(new LogMethodInterceptor());
        // 生成代理类，是 Tank 类的子类，如果 Tank 是 final 的，那么就不能生成动态代理类
        Tank tank = (Tank) enhancer.create();
        // 使用代理类的方法
        tank.move();
    }
}
